<?php
/**
 * Created by PhpStorm.
 * User: Qch
 * Date: 2016/9/8
 * Time: 16:16
 */

namespace J\Util;


class File
{
    /**
     * 文件内容读取
     * @param string $filename 文件名
     * @return string
     */
    public static function read($filename)
    {
        return self::get($filename, 'content');
    }

    public static function getArray($filename)
    {
        return self::get($filename, true);
    }

    /**
     * 读取文件信息
     * @access public
     * @param string $index 文件名
     * @param string|array $vars  'mtime','content',模板参数数组，true（读取数组文件）
     * @return array|bool|string content
     */
    public static function get($index, $vars = null)
    {
        if (!is_file($index)) return false;

        if ($vars === true) {
            /** @noinspection PhpIncludeInspection */
            return (include $index);
        }

        if (is_array($vars)) {
            // app()->debug(Message::RUN_FILE, ['file'=>$index, 'vars' => var_export($vars,true)]);
            $__ = $index;
            unset($vars['__']);// 防止意外重写了文件名
            extract($vars, EXTR_OVERWRITE);
            ob_start();
            /** @noinspection PhpIncludeInspection */
            include  $__;
            $contents = ob_get_contents();
            ob_end_clean();
            return $contents;
        }

        if (!in_array($vars, ['mtime', 'content'])) {
            $vars = 'content';
        }
        $info = array(
            'mtime' => filemtime($index),
            'content'=> file_get_contents($index)
        );

        return $info[$vars];
    }

    /**
     * 文件写入
     * @param string $file
     * @param array|string $value
     * @return bool
     */
    public static function add($file, $value)
    {
        if (empty($file)) return false;

        $dir = dirname($file);
        if (!is_dir($dir)) {
            mkdir($dir, 0777, true);
        }

        if(is_array($value)) $value = '<?php return '.var_export($value,true).';';

        return file_put_contents($file, $value);
    }

    /**
     * 文件是否存在
     * @access public
     * @param string $filename 文件名
     * @return boolean
     */
    public static function has($filename)
    {
        return is_file($filename);
    }

    /**
     * 文件删除
     * @access public
     * @param string $key 文件名
     * @return boolean
     */
    public static function remove($key)
    {
        return is_file($key) ? unlink($key) : false;
    }

    /**
     * @param string $key    文件名
     * @param int    $expire 过期时间
     * @return bool
     */
    public static function isExpire($key, $expire = null)
    {
        return is_file($key) and (!$expire or filemtime($key)>$expire);
    }

    public static function rmdir($dir)
    {
        foreach(glob($dir . '/*') as $file) {
            if(is_dir($file))
                self::rmdir($file);
            else
                unlink($file);
        }
        \rmdir($dir);
}

}